package com.example.mq.server.messagemanager;

import java.io.Serializable;
import java.util.Arrays;
import java.util.UUID;

public class Message extends BasicProperties implements Serializable {
    private byte[] body; // 消息内容

    // 创建一个工厂方法, 让工厂方法帮我们封装一下创建 Message 对象的过程.
    // 这个方法中创建的 Message 对象, 会自动生成唯一的 MessageId
    // 万一 routingKey 和 basicProperties 里的 routingKey 冲突, 以外面的为主.
    public static Message createMessageWithId(String routingKey, byte[] body) {
        Message message = new Message();
        // 此处生成的 MessageId 以 M- 作为前缀.
        message.messageId = "M-" + UUID.randomUUID();
        message.routingKey = routingKey;
        message.body = body;
        // 此处是把 body 和 basicProperties 先设置出来. 他俩是 Message 的核心内容.
        // 而 offsetBeg, offsetEnd, isValid, 则是消息持久化的时候才会用到. 在把消息写入文件之前再进行设定.
        // 此处只是在内存中创建一个 Message 对象.
        return message;
    }

    public byte[] getBody() {
        return body;
    }

    public void setBody(byte[] body) {
        this.body = body;
    }

    @Override
    public String toString() {
        return "Message{" +
                "messageId='" + messageId + '\'' +
                ", routingKey='" + routingKey + '\'' +
                ", body=" + Arrays.toString(body) +
                '}';
    }
}
